package model.proxy
{
	import model.Enseignant;
	import model.Formation;
	
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	import org.puremvc.as3.interfaces.IProxy;
	import org.puremvc.as3.patterns.proxy.Proxy; 
	
	public class EnseignantProxy extends Proxy implements IProxy 
	{ 
		
		public static const NAME : String = 'EnseignantProxy';		
		public static const LISTE_ENSEIGNANTS_OBTENUE : String = "ListeEnseignantsObtenue";
		public static const LISTE_STATUTS_ENSEIGNANT_OBTENUE : String = "ListeStatutsEnseignantObtenue";
		public static const LISTE_FORMATIONS_ENSEIGNANT_OBTENUE : String = "ListeFormationsEnseignantObtenue";
		private var remoteObjectEnseignant : RemoteObject = null;
		private var remoteObjectStatut : RemoteObject = null;
		private var remoteObjectFormation : RemoteObject = null;
		
		/** 
		 * Constructor 
		 * We create the table logins and insert a login by default to test 
		 */ 
		public function EnseignantProxy(data:Object=null) 
		{ 
			super(NAME, data);
			remoteObjectEnseignant = new RemoteObject();
			remoteObjectEnseignant.destination = "RemoteServiceEnseignant";
			remoteObjectEnseignant.source = "RemoteServiceEnseignant";
			remoteObjectEnseignant.endpoint = ApplicationFacade.SERVEUR;
			remoteObjectStatut = new RemoteObject();
			remoteObjectStatut.destination = "RemoteServiceStatut";
			remoteObjectStatut.source = "RemoteServiceStatut";
			remoteObjectStatut.endpoint = ApplicationFacade.SERVEUR;
			remoteObjectFormation = new RemoteObject();
			remoteObjectFormation.destination = "RemoteServiceFormation";
			remoteObjectFormation.source = "RemoteServiceFormation";
			remoteObjectFormation.endpoint = ApplicationFacade.SERVEUR;
		} 


 		public function obtenirListeEnseignants() : void 
 		{
 			remoteObjectEnseignant.addEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			remoteObjectEnseignant.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectEnseignant.obtenirListeEnseignantsUser(LoginProxy.user);
 		}
 		
 		public function obtenirListeStatutsEnseignant() : void 
 		{
 			remoteObjectStatut.addEventListener(ResultEvent.RESULT, listeStatutsEnseignantObtenue);
			remoteObjectStatut.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectStatut.obtenirListeStatuts();
 		}
 		
 		public function obtenirListeFormationsEnseignant() : void 
 		{
 			remoteObjectFormation.addEventListener(ResultEvent.RESULT, listeFormationsEnseignantObtenue);
			remoteObjectFormation.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectFormation.obtenirListeFormations();
 		}
 		
 		public function validerAjoutEnseignant(enseignant:Enseignant, formation:Formation) : void
 		{
 			remoteObjectEnseignant.addEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			remoteObjectEnseignant.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectEnseignant.ajouterEnseignant(enseignant, LoginProxy.user, formation);
 		}
 		
 		public function validerModifEnseignant(enseignant:Enseignant, formation:Formation) : void
 		{
 			remoteObjectEnseignant.addEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			remoteObjectEnseignant.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectEnseignant.modifierEnseignant(enseignant, LoginProxy.user, formation);
 		}
 		
 		public function supprimerEnseignant(enseignant:Enseignant) : void
 		{
 			remoteObjectEnseignant.addEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			remoteObjectEnseignant.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectEnseignant.supprimerEnseignant(enseignant, LoginProxy.user);
 		}
 		
 		
 		private function listeEnseignantsObtenue(event:ResultEvent):void
		{
			remoteObjectEnseignant.removeEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			var listeEnseignants:Array = (event.result as Array)
			sendNotification(LISTE_ENSEIGNANTS_OBTENUE, listeEnseignants);
		}
 		
 		private function listeStatutsEnseignantObtenue(event:ResultEvent):void
		{
			remoteObjectStatut.removeEventListener(ResultEvent.RESULT, listeStatutsEnseignantObtenue);
			var listeStatuts:Array = (event.result as Array)
			sendNotification(LISTE_STATUTS_ENSEIGNANT_OBTENUE, listeStatuts);
		}
		
 		private function listeFormationsEnseignantObtenue(event:ResultEvent):void
		{
			remoteObjectFormation.removeEventListener(ResultEvent.RESULT, listeFormationsEnseignantObtenue);
			var listeFormations:Array = (event.result as Array)
			sendNotification(LISTE_FORMATIONS_ENSEIGNANT_OBTENUE, listeFormations);
		}
		
		
		private function onFault(event:FaultEvent):void
		{
			trace("Fault");			
		}
	}
}